iT邦幫忙

2026 iThome 鐵人賽

DAY 25
0
Modern Web

Lovable:地球上最強的 AI 生成全端網站 Agentic 開發實戰系列 第 25 篇

第 25 章:診所營運流程——LINE 提醒、改期、報到與個資治理

  • 分享至 

  • xImage
  •  

本章目標

第 24 章讓預約能成立,本章讓它能被日常營運。你會加入:

  • 安全的改期流程。
  • LINE/Email 預約確認與前一天提醒。
  • 櫃檯報到、完成與未到紀錄。
  • 通知失敗待辦、保存期限與刪除/匿名化流程。

我們仍然不處理病歷或醫療判斷。這一章談的是營運可靠性與個資治理,而不是把網站升級成醫療資訊系統。

為什麼這一章重要

預約成功只是開始。真正消耗櫃檯時間的是改期、忘記到場、醫師臨時停診、LINE 未送達與離職員工仍可查看名單。若系統只有一張 appointments 表,所有例外都只能靠人工備註,最後沒有人知道資料是否可信。

本章把工作拆成三條互不污染的流程:

預約狀態:booked -> confirmed -> checked_in -> completed/no_show
通知狀態:queued -> sent/failed
資料生命週期:active -> retention_due -> anonymized/deleted

通知失敗不能取消預約;資料到期也不能直接刪掉仍有營運或法定保存需求的紀錄。

開始之前

完成第 24 章,準備 LINE Official Account、Messaging API channel 與測試用 LINE 帳號。若尚未申請,先用 mock sender 走完整佇列。不要用 LINE Notify 舊教學。

在 Plan Mode 鎖定決策:

請規劃現有診所預約 MVP 的營運功能,不要先實作。
加入安全改期、LINE 或 Email 確認、看診前一天提醒、報到、完成、未到、通知失敗待辦,以及個資保存期限和匿名化流程。
LINE webhook 要驗證簽章,推播只放預約必要資訊。通知失敗不能改變預約狀態。
系統仍不得蒐集病歷、症狀、診斷、處方、健保卡或身分證資料。
請列出新增資料、排程、角色權限、失敗重試、稽核事件與驗收案例。

步驟 1:用事件保存預約歷史

沿用 appointment_events,事件至少包含:

  • created、confirmed、rescheduled、cancelled。
  • checked_in、completed、no_show。
  • reminder_queued、reminder_sent、reminder_failed。
  • retention_reviewed、anonymized。

不要只更新 appointments.status 而丟失前一個狀態。事件記錄誰在什麼時間做了什麼,是處理客訴、錯誤與權限問題的基礎。

步驟 2:改期要原子化

改期不是先取消再建立,因為兩個步驟之間可能失敗。後端 reschedule_appointment 應:

  1. 驗證管理 token 或員工權限。
  2. 檢查新時段仍有效且有容量。
  3. 鎖定舊、新時段並占用新時段。
  4. 更新預約的 slot。
  5. 釋放舊時段。
  6. 建立包含前後時段的事件與通知工作。

任何步驟失敗都不應留下兩個占位或完全沒有時段的預約。接近看診時間的改期限制放在後端。

請實作原子化的 reschedule_appointment 後端操作。
支援使用管理 token 的預約者與登入的櫃檯人員。
必須先驗證新時段、容量、休診與改期期限,再於同一交易占用新時段、釋放舊時段並建立事件。
兩人競爭新時段最後一格時只能一人成功。重複送出相同改期要安全回傳既有結果。

診所原子化改期檢查與交易流程

圖 25-1:改期前先檢查容量、休診與期限,再於單一交易處理新舊時段。

實際按下模擬改期後,事件表新增 booked → rescheduled,原始建立事件仍保留且不可覆寫。

診所改期後新增不可覆寫事件

圖 25-2:改期完成後以 append-only 方式保存前後狀態與操作說明。

步驟 3:連結 LINE 而不是猜測收件人

LINE user ID 需由 LINE Login 或使用者與官方帳號互動後,透過受驗證的流程連結到系統使用者。LINE Login channel 與 Messaging API channel 的 provider 設定會影響使用者識別,實作時應依官方最新文件設定。

新增 line_links:app user、LINE user ID、連結時間、同意版本、解除時間。診所預約若允許訪客不用帳號,可在成功頁提供「連結 LINE 接收提醒」,完成授權後才綁定預約;只知道手機號碼不能直接推播。

使用者可以略過 LINE,Email 或畫面上的預約管理連結仍可使用。

步驟 4:建立通知工作與排程

新增:

  • notification_deliveries:預約、通道、範本、預定時間、狀態、嘗試次數、最後錯誤。
  • reminder_jobs:預約、提醒類型、執行時間、唯一鍵。

建立預約後排定確認通知與看診前一天提醒。排程以台北時間計算,但資料庫可保存 UTC。執行前重新檢查預約是否仍有效、時段是否改變、相同範本是否已成功發送。

LINE 訊息只包含診所名稱、預約日期時間、服務名稱、取消/改期連結。不要包含病情或其他敏感內容。使用者封鎖帳號、API 逾時或額度不足時,保存安全錯誤碼,按規則重試,最後進入櫃檯待辦。

步驟 5:驗證 LINE webhook

如果系統接收加好友、訊息或 postback webhook,必須使用 channel secret 驗證 LINE 簽章。驗證應以原始 request body 進行;解析或重新序列化後再驗證可能失敗。

驗證失敗立即拒絕,不建立連結或事件。事件處理採冪等設計,避免 LINE 重送時重複改期或重複建立通知。

請新增 LINE webhook 與通知 worker。
webhook 必須用原始 request body 與後端 secret 驗證簽章,並以 event ID 防止重複處理。
通知 worker 在送出前重新確認預約狀態、時段與既有成功紀錄。
LINE 失敗時不得取消或回滾預約;有限次數重試後建立櫃檯待辦,並保留 Email fallback。
日誌不可輸出 channel secret、完整 token 或不必要個資。

診所 LINE 與 Email 通知佇列

圖 25-3:通知成功、逾時重試、錯誤簽章、封鎖後 Email fallback 與略過各自有獨立狀態;通知失敗不會取消預約。

步驟 6:把報到做成可追蹤操作

櫃檯今日列表提供「已報到」。按下後保存時間與操作者,並讓醫師或後續工作看見等待狀態。完成看診只記錄 completed,不要在這個系統輸入診斷內容。

看診時間過後,由櫃檯人工確認 no_show,不要只靠排程自動判定,因為現場可能延誤或漏按報到。管理者可查看未到率,但報表使用聚合資料,不顯示不必要姓名。

步驟 7:設定資料保存與離職停權

建立可設定的保存政策,例如已完成或取消預約在一定期間後進入 retention_due。具體期限應由實際診所依目的與法遵要求決定,本書不替業者下法律結論。

到期工作先產生審查清單,再匿名化或刪除聯絡資料。統計需要可保留不含身分資訊的日期、服務與結果。每次處理保存政策版本、執行者與筆數。

員工離職或停權時,membership 立即失效;既有事件保留操作者識別快照,但該帳號不能再讀取名單。不要只從畫面選單移除人員。

診所個資保存、匿名化待辦與最小權限

圖 25-4:示範保存政策、匿名化待辦、離職停權、角色最小權限與稽核事件;圖中的期限僅為測試值,實際期限仍須由診所依目的與法遵要求決定。

步驟 8:驗收完整營運流程

至少測試:

  1. 使用者改期到正常時段,舊容量釋放、新容量占用且只通知一次。
  2. 兩人競爭新時段最後一格,只有一人成功。
  3. 重複改期請求不產生兩筆事件或占位。
  4. 已取消預約不發提醒。
  5. 改期後舊時段提醒不會送出。
  6. LINE 簽章錯誤時拒絕 webhook。
  7. LINE timeout 不改變預約狀態,重試後進入待辦。
  8. 櫃檯可報到、完成與標記未到,但不能看管理者設定。
  9. 停權員工立即失去列表存取。
  10. 到期資料匿名化後,營運統計仍可用且無法還原身分。
請執行診所營運功能驗收。
測試原子化改期、最後一格競爭、重複請求、取消後提醒、改期後舊提醒、LINE 錯誤簽章、API timeout、員工停權與到期匿名化。
每項列出資料庫前後狀態、事件、通知紀錄、畫面結果與權限證據。
檢查任何通知、日誌、報表是否意外包含醫療內容或不必要個資。

實作練習

建立明天與後天的測試時段。讓預約者 A 改期到容量 1 的時段,同時讓預約者 B 競爭;取消另一筆預約後確認提醒被跳過。模擬 LINE 正常、timeout、錯誤簽章與封鎖四種情況,再停權一位櫃檯帳號。

預期成果是預約、通知與權限各自保持正確;任何外部服務失敗都不會讓預約消失,也沒有醫療資訊被送進 LINE。

常見錯誤

  • 先取消再建立改期: 中途失敗會讓預約消失,應使用單一後端交易。
  • 把手機號碼當 LINE ID: 兩者不能互換,必須建立正式連結流程。
  • 提醒排程不重新檢查: 已取消或改期仍會收到舊訊息。
  • 用 LINE 訊息保存病情: 推播只放預約必要資訊。
  • 自動判斷 no-show: 現場延誤會造成錯誤,先由櫃檯確認。
  • 刪除離職員工的歷史: 應停權但保留既有操作事件。

上線前檢查清單

  • [ ] 改期在單一可信任交易中完成。
  • [ ] 改期並行與重複請求已測試。
  • [ ] LINE 帳號連結有明確同意與解除方式。
  • [ ] webhook 使用原始 body 驗證簽章。
  • [ ] 通知有唯一鍵、重試上限與人工待辦。
  • [ ] 取消、改期後不會發送過時提醒。
  • [ ] 推播不包含病情或敏感醫療內容。
  • [ ] 報到、完成與未到均有操作者事件。
  • [ ] 員工停權會立即撤銷資料存取。
  • [ ] 保存期限、匿名化與刪除流程有書面決策。
  • [ ] 所有測試使用虛構資料。

延伸閱讀

名詞解釋與延伸提問

  • 原子化改期:占用新時段、釋放舊時段與寫入事件要全部成功或全部失敗。
  • 通知佇列:先記錄待發工作,再由獨立 worker 呼叫外部服務。
  • 資料匿名化:移除或轉換可識別個人的欄位,同時保留必要統計。
  • Membership:使用者在特定組織中的角色與有效狀態。

你可以接著問 Lovable:「請依我的提醒時間、改期限制與保存政策,生成排程、失敗待辦與故障演練清單。」下一章會進入台灣小型電商,先把商品、庫存、後端計價與訂單快照做對。


嗨!我是 Wolke,曾任 Google Developer Expert(GDE,2019–2023) 與 LINE API Expert。我熱衷於研究 AI Agent、n8n 自動化工作流及全端開發架構,致力於將 AI 技術轉化為實際的生產力工具。

如果你喜歡這篇文章,歡迎透過以下方式與我交流,獲取更多技術實戰內容:

📚 技術著作:《實用的 Gemini API 開發點子書》,帶你運用 Gemini App、Google AI Studio、Gemini CLI 與 Antigravity IDE,打造 AI Agent 與實用產品。

📝 技術部落格:歡迎追蹤我的 Medium,我會持續分享 Agentic Automation、架構設計與實際開發的踩坑心得。

🎤 技術講座:我持續受邀至技術社群及研討會,分享 AI Agent、自動化工作流、DevOps 與全端開發實戰。曾於 2026 年 6 月 26 日的 DevOpsDays Taipei 2026 主講「不再只是寫腳本!讓 AI 代理人成為你的 SRE 最佳夥伴」工作坊。

如果你的企業、社群或學校正在尋找相關主題講者,歡迎私訊與我聯繫、洽談講座合作!

🎁 免費送 Lovable 額度給讀者!

我每個月會開放 10 個名額,每人 50 點 Lovable 額度,讓大家實際動手打造自己的網站或 App。

參加方式:

  1. 訂閱本系列文章
  2. 分享任一篇系列文章
  3. 私訊分享截圖及你的 Lovable 帳號 Email

確認後,我會邀請你加入 Lovable workspace 並設定 50 點額度。名額有限,送完為止!


上一篇
第 24 章:診所預約 MVP——時段、名額與櫃檯後台
下一篇
第 26 章:小型電商 MVP——商品、購物車、庫存與訂單
系列文
Lovable:地球上最強的 AI 生成全端網站 Agentic 開發實戰 共 27 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言